package singleton;

//懒汉模式
public class LazySingleton {
	//构造私有化
	private LazySingleton() {
		
	}
	//声明唯一实例
	private static volatile LazySingleton instance;

	//双重检查，使得线程安全
	public static LazySingleton getInstance() throws InterruptedException {
		//先检查实例是否存在，如果不存在才进入下面的同步块
		if(instance == null) {
			//同步块，线程安全的创建实例
			synchronized (LazySingleton.class) {
				//再次检查实例是否存在，如果不存在才真正的创建实例
				if(instance == null) {
					Thread.sleep(3000);
					instance = new LazySingleton();
				}
			}
		}
		return instance;
	}
	/**
	 * 这种实现方式既可以实现线程安全地创建实例，
	 * 而又不会对性能造成太大的影响。
	 * 它只是第一次创建实例的时候同步，以后就不需要同步了，从而加快了运行速度。 
	 */

}
